home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 08 - 1992 / 08.03 Jul 92 / Matrix Parser / ParserDriver < prev    next >
Encoding:
Text File  |  1992-12-24  |  4.0 KB  |  239 lines  |  [TEXT/PJMM]

  1.  
  2. program ParserDriver;
  3.  
  4.     uses
  5.  
  6.         Globals, Commands, Inverse, InputAMatrix, Eval, AllocateHandles;
  7.  
  8.  
  9.     label
  10.         222, 995, 997, 998, 999, 9999;
  11.  
  12.     var
  13.  
  14.         i, j, randommod, kmat, mrows, ncols, matpointer: longint;
  15.         x: extended;
  16.         vRefNum: integer;
  17.         windowsize: rect;
  18.         line, result, name: str255;
  19.         ch: char;
  20.         savename: stringsize;
  21.         err: OSErr;
  22.         fileinfo: fInfo;
  23.         randommatrix: boolean;
  24.  
  25.  
  26. begin
  27.  
  28.     AllocateParserHandles;
  29.  
  30.     varfilename := 'variablefile';
  31.     varfileopen := false;
  32.     dummyopen := false;
  33.  
  34.     decplace := 5;
  35.     decplaceplus10 := decplace + 10;
  36.  
  37.     for i := 1 to maxnumberfiles do
  38.         begin
  39.             mfileopen^^[i] := false;
  40.             mfilenew^^[i] := false;
  41.             matrixnew^^[i] := false;
  42.             matrixstoredinfile^^[i] := false;
  43.         end;
  44.  
  45.     Hideall;
  46.     setrect(windowsize, 0, 38, 520, 340);
  47.     settextrect(windowsize);
  48.     showtext;
  49.  
  50.     numvariables := 0;
  51.     randommod := 100;
  52.     bignumber := 100;
  53.  
  54.     readvariables;
  55.  
  56.  
  57. 998:
  58.  
  59.     error := '';
  60.     numnodes := 0;
  61.  
  62.     write(blank);
  63.     readln(line);
  64.  
  65.     if (pos('quit', line) <> 0) then
  66.         goto 999;
  67.  
  68.     if (pos('changebig', line) <> 0) then
  69.         begin
  70.             writeln('read in your value for bignumber');
  71.             write(blank);
  72.             readln(bignumber);
  73.             goto 998;
  74.         end;
  75.  
  76.  
  77.     if (pos('creatematrix', line) <> 0) then
  78.         begin
  79.  
  80.             write(blank);
  81.             readln(savename);
  82.  
  83.             if savename = '' then
  84.                 goto 998;
  85.  
  86.             randommatrix := false;
  87.             writeln('Random matrix?  y  or  n');
  88.             write(blank);
  89.             readln(ch);
  90.  
  91.             if (ch = 'y') or (ch = 'Y') then
  92.                 begin
  93.                     randommatrix := true;
  94.                     writeln('read in mod value');
  95.                     write(blank);
  96.                     readln(randommod);
  97.                 end;
  98.             writeln('read in number of rows and cols');
  99.             write(blank);
  100.             readln(mrows);
  101.             write(blank);
  102.             readln(ncols);
  103.             InputAMatrix(savename, kmat, mrows, ncols, randommod, randommatrix);
  104.             goto 998;
  105.         end;
  106.  
  107.  
  108.     if (pos('readmatrix', line) <> 0) then
  109.         begin
  110.             write(blank);
  111.             readln(savename);
  112.             readmatrix(savename);
  113.             goto 998;
  114.         end;
  115.  
  116.  
  117.     if (pos('dec', line) <> 0) then
  118.         begin
  119.             setdecimal;
  120.             goto 998;
  121.         end;
  122.  
  123.  
  124.     if (pos('cls', line) <> 0) then
  125.         begin
  126.             clearscreen(line);
  127.             goto 998;
  128.         end;
  129.  
  130.     if (pos('clm', line) <> 0) then
  131.         begin
  132.             for i := 1 to numvariables do
  133.                 begin
  134.                     savename := strvar^^[i]^^;
  135.                     deletevariable(savename);
  136.                 end;
  137.             numvariables := 0;
  138.             goto 998;
  139.         end;
  140.  
  141.     if pos('delete', line) <> 0 then
  142.         begin
  143.  
  144. 222:
  145.             write(blank);
  146.             readln(savename);
  147.             if (savename = '') then
  148.                 goto 998;
  149.             deletevariable(savename);
  150.             goto 222;
  151.         end;
  152.  
  153.     if line = '' then
  154.         goto 998;
  155.  
  156.     if (pos('listv', line) <> 0) then
  157.         begin
  158.             listvariables;
  159.             goto 998;
  160.         end;
  161.  
  162.     for i := 1 to numvariables do
  163.         begin
  164.             j := numvariables + 1 - i;
  165.             if strvar^^[j]^^ = line then
  166.                 begin
  167.                     savename := strvar^^[j]^^;
  168.                     readmatrix(savename);
  169.                     goto 998;
  170.                 end;
  171.         end;
  172.  
  173.     result := eval(line);
  174.  
  175.     if (line = 'real') then
  176.         writeln(result);
  177.  
  178.     if (line = 'matrix') then
  179.         begin
  180.             readstring(result, x);
  181.             matpointer := round(x);
  182.             savename := strvar^^[matpointer]^^;
  183.             readmatrix(savename);
  184.         end;
  185.  
  186.     if (line = 'error') then
  187.         writeln(result);
  188.  
  189.     goto 998;
  190.  
  191. 999:
  192.  
  193.     if numvariables > 0 then
  194.         begin
  195.             writeln('Do you want to save your current variables for the next session? y/n');
  196. 997:
  197.             writeln(blank);
  198.             readln(ch);
  199.             if (ch = 'n') or (ch = 'N') then
  200.                 begin
  201.                     if varfileopen then
  202.                         begin
  203.                             rewrite(varfile);
  204.                             close(varfile);
  205.                             varfileopen := false;
  206.                         end;
  207.                     if numvariables > 0 then
  208.                         for i := 1 to numvariables do
  209.                             begin
  210.                                 err := GetVol(@name, vRefNum);
  211.                                 name := strvar^^[i]^^;
  212.                                 err := FSDelete(name, vRefNum);
  213.                             end;
  214.                     goto 995;
  215.                 end;
  216.             if (ch = 'y') or (ch = 'Y') then
  217.                 storevariables;
  218.             if not ((ch = 'y') or (ch = 'Y') or (ch = 'n') or (ch = 'N')) then
  219.                 begin
  220.                     writeln('Should be a   y, Y, n, or N ');
  221.                     goto 997;
  222.                 end;
  223.             if varfileopen then
  224.                 begin
  225.                     close(varfile);
  226.                     varfileopen := false;
  227.                     err := GetVol(@name, vRefNum);
  228.                     name := varfilename;
  229.                     fileinfo.fdFlags := fInvisible;
  230.                     err := SetFInfo(name, vRefNum, fileinfo);
  231.                 end;
  232.         end;
  233.  
  234. 995:
  235.  
  236.     DisposeOfParserHandles;
  237.  
  238. 9999:
  239. end.